package cliente.controle;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

// Como só existira um sistema, será um Singleton
public class Sistema {

	private final int maximoNegativoSimples = -1000;
	private final int maximoNegativoEspecial = -20000;
	private final int valorMinimo = 50000;
	private static Sistema unicaInstancia = null;
	private boolean cliente;
	private int atualId;
	private final int manutencaoEspecialCorrenteReais = 15;
	private final int manutencaoEspecialCorrenteCentavos = 10;
	private final int manutencaoSimplesCorrenteReais = 20;
	private final int manutencaoSimplesCorrenteCentavos = 0;
	private final int movimentacaoSimplesReais = 1;
	private final int movimentacaoSimplesCentavos = 50;
	private final int movimentacaoEspecialReais = 1;
	private final int movimentacaoEspecialCentavos = 0;
	private final double jurosPoupanca = 0.005; // poupanca nao entra em
												// negativo
	private final double jurosCorrente = 0.085; // juros referente a divida para
												// contas negativas
	private final double impostos = 0.0038;

	private PrintWriter out = null;
	private BufferedReader in = null;

	public static Sistema getUnicaInstancia() {
		if (unicaInstancia != null) {
			return unicaInstancia;
		}
		unicaInstancia = new Sistema();
		return unicaInstancia;
	}

	public <T> void fromArrayToArrayList(T[] array, ArrayList<T> arrayList) {
		for (T element : array) {
			arrayList.add(element); // correct
		}
	}

	public int getValorMinimo() {
		return valorMinimo;
	}

	public int getMaximoNegativoSimples() {
		return maximoNegativoSimples;
	}

	public int getMaximoNegativoEspecial() {
		return maximoNegativoEspecial;
	}

	public void setCliente(boolean cliente) {
		this.cliente = cliente;
	}

	public boolean isCliente() {
		return cliente;
	}

	public void setAtualId(int atualId) {
		this.atualId = atualId;
	}

	public int getAtualId() {
		return atualId;
	}

	public PrintWriter getOut() {
		return out;
	}

	public void setOut(PrintWriter out) {
		this.out = out;
	}

	public BufferedReader getIn() {
		return in;
	}

	public void setIn(BufferedReader in) {
		this.in = in;
	}

	public void escreveServidor(String s) {
		out.println(s);
	}

	public void escreveServidor(int i) {
		out.println(i);
	}

	public String getLineServidor() throws IOException {
		return in.readLine();
	}

	public int getManutencaoEspecialCorrenteReais() {
		return manutencaoEspecialCorrenteReais;
	}

	public int getManutencaoEspecialCorrenteCentavos() {
		return manutencaoEspecialCorrenteCentavos;
	}

	public int getManutencaoSimplesCorrenteReais() {
		return manutencaoSimplesCorrenteReais;
	}

	public int getManutencaoSimplesCorrenteCentavos() {
		return manutencaoSimplesCorrenteCentavos;
	}

	public int getMovimentacaoSimplesReais() {
		return movimentacaoSimplesReais;
	}

	public int getMovimentacaoSimplesCentavos() {
		return movimentacaoSimplesCentavos;
	}

	public int getMovimentacaoEspecialReais() {
		return movimentacaoEspecialReais;
	}

	public int getMovimentacaoEspecialCentavos() {
		return movimentacaoEspecialCentavos;
	}

	public double getJurosPoupanca() {
		return jurosPoupanca;
	}

	public double getJurosCorrente() {
		return jurosCorrente;
	}

	public double getImpostos() {
		return impostos;
	}
}
